dojo.provide('rhino.lang.java');

rhino.lang.java.createArray = function(type, length) {
  return java.lang.reflect.Array.newInstance(type, length);
};

rhino.lang.java.toArray = function(type, arr) {
  var result = java.lang.reflect.Array.newInstance(type, arr.length);
  for(var i = arr.length - 1; i >= 0; i--) result[i] = arr[i];
  return result;
};

rhino.lang.java.syncMethods = function(obj) {
  for (var m in obj) {
    if (typeof(obj[m]) == 'function' && obj.hasOwnProperty(m)) {
      obj[m] = (function(func) {
        return sync(function() {
          return func.apply(this, arguments);
        });
      })(obj[m]);
    }
  }
};

rhino.lang.java.spawnAndSync = function(scope, method) {
  var func = sync(scope[method]);
  return function() {
    var args = Array.slice(arguments);
    spawn(function() {
      func.apply(scope, args);
    });
  };
};